package br.com.aquinoevasconcelos.control;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import br.com.aquinoevasconcelos.excecao.ObjNaoEncontradoException;
import br.com.aquinoevasconcelos.repositorio.IRepositorioCliente;
import br.com.aquinoevasconcelos.repositorio.RepositorioCliente;
import br.com.aquinoevasconcelos.user.UsuarioCliente;
import br.com.aquinoevasconcelos.util.SendMail;

/**
 * @author Paulo Roberto
 * @email paulolima2008@hotmail.com
 * @version 1.0 @ Propriedade da Techcode
 */

public class ControladorCliente {

	private IRepositorioCliente cliente;
	private ArrayList<UsuarioCliente> clienteBanco;
	private UsuarioCliente usuCliente;

	// construtor da classe
	public ControladorCliente(IRepositorioCliente usuarioCliente) {
		this.cliente = usuarioCliente;
	}

	// -----------------------------------------------------------------------
	public void inserirCliente(UsuarioCliente usuarioCliente) {
		cliente.inserirCliente(usuarioCliente);
	}

	// -----------------------------------------------------------------------
	public void atualizarCliente(UsuarioCliente usuariocliente) {
		cliente.atualizarCliente(usuariocliente);
	}

	// -----------------------------------------------------------------------

	public void removerCliente(UsuarioCliente usuarioCliente) {
		cliente.removerCliente(usuarioCliente);
	}

	// -----------------------------------------------------------------------
	public List<UsuarioCliente> pesquisaCliente(String query) {
		return cliente.pesquisaCliente(query);
	}

	// -----------------------------------------------------------------------
	public List<UsuarioCliente> listaCliente() {
		return cliente.listaCliente();
	}

	// -----------------------------------------------------------------------
	public UsuarioCliente AunteticacaoCliente(String login, String senha)
			throws ObjNaoEncontradoException {

		cliente = new RepositorioCliente();
		usuCliente = new UsuarioCliente();

		try {

			clienteBanco = (ArrayList<UsuarioCliente>) cliente
					.pesquisaCliente("FROM usuario WHERE login = '" + login
							+ "'AND senha = '" + senha
							+ "' AND identificacao = 'cliente'");

			if (clienteBanco.size() != 0) {
				System.out.println("entrou aqui");
				usuCliente.setCnae(clienteBanco.get(0).getCnae());
				usuCliente.setCnpj(clienteBanco.get(0).getCnpj());
				usuCliente.setEmail(clienteBanco.get(0).getEmail());
				usuCliente.setEndereco(clienteBanco.get(0).getEndereco());
				usuCliente.setId(clienteBanco.get(0).getId());
				usuCliente.setInscricaoEstadual(clienteBanco.get(0)
						.getInscricaoEstadual());
				usuCliente.setInscricaoMunicipal(clienteBanco.get(0)
						.getInscricaoMunicipal());
				usuCliente.setLogin(clienteBanco.get(0).getLogin());
				usuCliente.setNome(clienteBanco.get(0).getNome());
				usuCliente.setSenha(clienteBanco.get(0).getSenha());
				usuCliente.setTributacao(clienteBanco.get(0).getTributacao());
				return usuCliente;
			}

			else {
				System.out.println("não deu certo");
				throw new ObjNaoEncontradoException();
			}
		} catch (ObjNaoEncontradoException e) {
			throw new ObjNaoEncontradoException();

		}
	}

	// -----------------------------------------------------------------------
	public void recuperarSenha(String login) {

		cliente = new RepositorioCliente();

		clienteBanco = (ArrayList<UsuarioCliente>) cliente
				.pesquisaCliente("FROM usuario WHERE login = '" + login
						+ "' AND identificacao = 'cliente'");

		String email = clienteBanco.get(0).getEmail();
		String senha = clienteBanco.get(0).getSenha();
		String nome = clienteBanco.get(0).getNome();

		SendMail sm = new SendMail();

		String resposta = "Sr(a). " + nome
				+ "\n\n A Recuperação de Senha Foi Realizada:\n\n Login: "
				+ login + "\n Senha: " + senha;

		sm.sendMail("aindafalta@gmail.com", email,
				"Aquino&Vasconcelos- Consultoria", resposta);

	}

	// ------------------------------------------------------------------------

	public boolean validaLogin(String login) {

		cliente = new RepositorioCliente();
		usuCliente = null;

		try {

			clienteBanco = (ArrayList<UsuarioCliente>) cliente
					.pesquisaCliente("FROM usuario WHERE login = '" + login
							+ "' AND  identificacao = 'cliente'");

			if (clienteBanco.size() != 0) {
				// cliente ja existe
				return true;
			} else {
				// Cliente nao existe
				return false;
			}

		} catch (Exception e) {
			e.printStackTrace();
			return true;

		}

	}

	// ------------------------------------------------------------------------
	public UsuarioCliente editarCliente(long id) {

		usuCliente = null;
		cliente = new RepositorioCliente();

		usuCliente = cliente.pesquisaCliente(
				"FROM usuario WHERE id = '" + id
						+ "' AND identificacao = 'cliente'").get(0);

		return usuCliente;
	}

	// ------------------------------------------------------------------------
	public boolean verificarEmailRecuperacaodeSenha(String email) {

		usuCliente = null;
		cliente = new RepositorioCliente();
		try {

			usuCliente = cliente.pesquisaCliente(
					"FROM usuario WHERE email = '" + email
							+ "' AND identificacao = 'cliente'").get(0);

			if (usuCliente != null) {
				enviarRecuperacaoSenha(usuCliente.getEmail(),
						usuCliente.getNome(), usuCliente.getLogin(),
						usuCliente.getSenha());
				// email valido retorna verdadeiro
				return true;
			} else {
				// email invalido retorna falso
				return false;
			}
		} catch (Exception e) {
			return false;
		}

	}

	// ------------------------------------------------------------------------
	private void enviarRecuperacaoSenha(String email, String nome,
			String login, String senha){
		SendMail sm = new SendMail();


		String resposta = "Sr(a).: "
				+ nome
				+ "\n\n Recuperação de Senha Realizada com Sucesso!\nLOGIN: "
				+ login
				+ "\nSENHA: "
				+ senha
				+ "\n\nAntenciosamente Aquino&Vasconcelos Consultoria contábil.\n\n";

		
		sm.sendMail("tech.code.projetos@gmail.com", email,
				"Aquino&Vasconcelos- Consultoria(Recuperacao de Senha)",
				resposta);
	}

	// ------------------------------------------------------------------------

}
